1

Предположим, что у меня есть таблица и для упрощения всех строк около Persons.
Так что предположим, что мы храним цвет человека. Теперь давайте сделаем упрощение, что у нас есть 1 миллион записей, а весь цвет белый (глупый пример, но, пожалуйста, со мной).
Теперь в этом случае white повторяется более 1 миллиона раз.
Теперь, если мы не можем изменить таблицу, например, white_person table так, как это происходит, означает ли это, что атрибут color и person имеют определенное отношение, которое
1) оправдывает повторяющийся атрибут в таблице?
2) оправдывает создание новой таблицы и рассматривает ее как отношение 1-N? Но формально, как бы определить этот тип отношений?Как мы обрабатываем столбец, который имеет одинаковое значение во всех записях таблицы?

ответ

0

Теперь, если мы не можем изменить таблицу, например, white_person table Способ, которым он является, означает ли это, что цвет атрибута и лицо имеют определенное отношение, которое

1) оправдывает повторяющийся атрибут в таблице?

Повторяющийся атрибут имеет определенное значение в технологии баз данных. Он не означает, что вы можете найти несколько строк, имеющих одинаковое значение. (Вот что такое строки: для.) У вас нет повторяющегося атрибута.

2) оправдывает создание новой таблицы и рассматривает ее как отношение 1-N ? Но формально, как бы этот тип отношений определялся ?

Отношения 1-N будут идентифицированы функциональной зависимостью - вы найдете человека, цвет которого белый, а цвет - также fuschia. Сколько цветов может быть человек в вашей базе данных?

+0

1) 'Это не означает, что вы можете найти несколько строк, которые имеют одинаковое значение. (Вот для чего нужны строки.) 'Я прошу о том, чтобы значение столбца было одинаковым для всех строк. Не все строки имеют одинаковые значения во всем столбце. 2) «Отношение 1-N будет идентифицироваться функциональной зависимостью да, но вы можете иметь отдельную таблицу для отношения 1-1. Это был мой смысл, но, возможно, я не был ясен – Jim

+0

* «Я прошу о том, чтобы значение столбца было одинаковым для всех строк». * И это именно то, о чем я говорю. Для этого нужны строки. У вас нет повторяющегося атрибута. –

1

Если одно и то же значение повторяется в каждой строке, то из-за зависимости, которую вы действительно хотели моделировать, ∅ -> {color}, тогда таблица ваших лиц нарушает 2NF: определитель ∅ (пустой набор) является правильным подмножеством ключа. Изменения, необходимые для удовлетворения 2NF, заключались бы в том, чтобы удалить атрибут цвета в новую таблицу с ключом на ∅ (т. Е. Таблицу с одной строкой). Или вообще удалите атрибут из модели.

Обратите внимание, что зависимость никогда автоматически не подразумевается только из-за совпадения некоторых значений в таблице. В чем дело, какие бизнес-правила требуют, чтобы СУБД обеспечивала соблюдение и правильно ли поддерживала модель данных.

Я обсуждал аналогичный пример here.

+0

Что такое '∅ -> {color}'? Я не совсем понимаю, что вы имеете ввиду? – Jim

+0

X-> A означает функциональную зависимость, в которой значения атрибута (ов) X определяют значения A. Если X - это пустой набор, означающий, что значение A должно быть определено без ссылки на любой другой атрибут, и поэтому значение из A одинакова для каждой строки. – sqlvogel

1

Если факт может быть принят, его не нужно хранить. Поэтому, если есть персональный атрибут, значение которого известно заранее, что вы знаете , обязательно - это то же самое для всех людей в базе данных и всегда будет оставаться неизменным в будущем, тогда вам не нужно физически хранить это в базе данных вообще.

Но я сомневаюсь, что вы можете сделать такое предположение.Чтобы снизить стоимость хранения много повторяющихся строк, отделите цвет к своей таблице с тонким surrogate key (скажем, байтом или 16-битным int), а затем ссылайтесь на него (через FOREIGN KEY) из «большой» таблицы. Таким образом, вы не повторяете строки, вы повторяете (тоньше) целые числа. Это не вопрос нормализации (оба варианта «нормализованы»), но и оптимизация физического дизайна.

Однако, если есть другой атрибут, функционально зависящий от цвета, то у вас обязательно должна быть отдельная таблица. В противном случае будет transitive functional dependencyПК -> цвет -> другой, нарушающий 3NF.

Например:

enter image description here

+0

Бранко: «Если можно предположить факт, его не нужно хранить». Если предположения должны быть встроены в код или сохраняться в базе данных? Я бы сказал, это зависит. Сначала взвесьте потенциальные издержки и риски, связанные с необходимостью повторного выпуска кода, если/при изменении допущений, или необходимости обновлять элемент данных в базе данных. – sqlvogel

+0

@sqlvogel Я делал довольно философский момент. «Предположение», которое я описал, никогда не меняется. Конечно, реальный мир работает по-разному. –

+0

+1: Интересная идея - ссылка на другую таблицу. Это стандартная практика? – Jim

Смежные вопросы