внешний ключ или нулевое значение для связи двух удаленных таблиц


person Ali BAGHO    schedule 23.09.2017    source источник
comment
Что должны означать линии между клиниками и статьями? Что тогда другие должны означать? Какую ссылку вы используете для построения диаграмм? Какой образец вы используете для проектирования? PS Диаграммы — приятное дополнение, но пожалуйста, всегда включайте весь текст как текст, а не как изображения/ссылки.   -  person philipxy    schedule 24.09.2017


Ответы (2)


Таблица представляет отношения между значениями. (Некоторые значения идентифицируют сущности.) База данных не может использоваться, пока нам не будет сообщено, что каждая таблица — база или результат запроса — означает: каким отношениям бизнес/приложение удовлетворяют ее строки. (То есть, каков его (характеристический) предикат.) Каковы отношения для ваших таблиц?

Для запроса мы выражаем отношение в терминах базовых отношений, а затем выражаем его таблицу в терминах соответствующих базовых таблиц. Например, объединение возвращает строки, удовлетворяющие одному отношению и другому. Итак, опять же, нам нужно знать взаимосвязь таблиц с точки зрения бизнеса/приложения.

Кардиналы и ограничения – это свойства отношений с учетом возможных ситуаций. Они не нужны для обновления или запроса. Они могут направлять дизайн и используются для целостности.

Когда, говоря о клинике, вы говорите о «ее» поставщиках, вы не говорите того, что имеете в виду. «Имеет», «его», «для», «ссылки», «соответствует» — все ничего не означает — они относятся к связанным объектам, но не говорят, как они связаны с точки зрения бизнеса/приложения. Этот дизайн не содержит явной связи между клиниками и статьями. Если да, то вы ничего не сказали, благодаря чему мы могли бы поставить правильные строки или увидеть строки и узнать о ситуации. Тем не менее, вы могли бы затем вывести строки «клиника-поставщик», где поставщик «для» некоторого товара, который «имеет» данная клиника. Но разве это отношения, которые вы имеете в виду?? Например, если вам нужны пары, в которых клинике разрешено «иметь» поставщика «для» некоторых статей, это новая взаимосвязь/таблица, которая не может быть получена из того, что у вас есть.

создание «нулевой» статьи для каждого поставщика в article_supplier

Эта взаимосвязь/таблица представляет собой определенную комбинацию article_supplier и только что описанной взаимосвязи/таблицы. Но проще иметь только эти два.

создание внешнего ключа в поставщике, который ссылается на соответствующую клинику

Это означало бы, что если поставщик «имеет» более одной клиники, то в новой версии могут быть строки, отличающиеся только всеми остальными столбцами; Теория нормализации говорит, что это хуже, чем исходный дизайн и взаимосвязь/таблица Clinic_supplier. И это означает, что если у поставщика «нет» клиники, вам понадобится что-то вроде обнуляемого FK (внешний ключ).

Так что вам, вероятно, нужна таблица Clinic_Supplier. Но вы должны опубликовать новый вопрос, в котором вы на самом деле говорите, о каких отношениях между бизнесом и приложением вы говорите.

Ваш вопрос и следующее по существу дублируются в том смысле, что основные принципы/понятия, которые очевидно применяются для ответа на них, одинаковы:
Как я могу найти отношения между таблицами, которые связаны между собой?
Необходимо объединить 2 таблицы с их FK в 3-я таблица
Лучшее решение - троичная или двоичная связь

Вам нужно прочитать учебник по информационному моделированию и проектированию баз данных.

person philipxy    schedule 23.09.2017
comment
Последнее предложение говорит само за себя. Проектирование базы данных — это нечто большее, чем выяснение синтаксиса. - person Walter Mitty; 24.09.2017
comment
Раньше он был первым! Я не понимаю, что вы пытаетесь сказать о синтаксисе; Я использую предикат не в смысле выражения, а в смысле значения. (Обозначается каким-то выражением, конечно.) Мой ответ касается семантики. - person philipxy; 24.09.2017
comment
Мой комментарий был адресован ОП, а не вашему ответу. Я полностью согласен с вашим ответом. - person Walter Mitty; 24.09.2017
comment
оба ваших вопроса были очень полезны, спасибо! Я всегда стараюсь максимально упростить вопрос, но каждый раз что-то путаю. то, что я не смог добавить, это: - Я забыл добавить FK в статью - Я использую логику Eloquent (HasOne, BelongsTo ..) для выражения запросов, которые мне понадобятся - это небольшая программа клиники и поставщик, который поставляет много клиник не нужно, нужно следующее: - получить список артикулов, принадлежащих клинике (выраженный) - каждый артикул может поставляться 1-м поставщиком (выраженный) - получить список поставщиков (СВ) - person Ali BAGHO; 24.09.2017
comment
В конце концов я могу просто добавить clinic_FK в поставщика и легко получить список, и мой вопрос: можно ли это сделать или мне следует переделать это, потому что, если я столкнусь с этой проблемой, значит дизайн просто неправильный, и я что-то упускаю еще? - person Ali BAGHO; 24.09.2017

В вашем дизайне: Поставщик - это таблица. Статьи — это таблица. Поскольку Поставщик поставляет товары, их взаимосвязь выражается в таблице, которая их связывает. Итак, есть таблица supplier_article.

Клиника стол. Вы упомянули, что клиника использует статьи. По тому же принципу, что и выше, связь между Clinic и Article должна быть выражена в виде таблицы. Это должна быть таблица clinic_article.

Хотя вы не упомянули, вы должны посмотреть на другие возникающие зависимости. Например, клиника выполняет процедуры, а в процедурах используются изделия.

путем создания внешнего ключа в поставщике, который ссылается на соответствующую клинику

Это предполагает, что один поставщик может всегда снабжать только одну клинику. Даже если это так сегодня, это не будет так завтра, потому что вы можете захотеть запланировать несколько клиник в одном и том же месте или с использованием одного и того же приложения или базы данных.

person Whirl Mind    schedule 24.09.2017