Нет повторяющихся строк, но избыточные данные - PullRequest
1 голос
/ 26 июля 2010

У меня есть таблица MySQL, которая представляет продукты компании.Таблица показывает, совместимы ли два продукта друг с другом.

Таблица выглядит примерно так:

Product1    Product2    Compatible?
A           A           Yes
A           B           ?
A           C           No
A           D           ?
B           A           ?
B           B           Yes
B           C           ?
B           D           Maybe
C           A           No
C           B           ?
C           C           Yes
C           D           ?
D           A           ?
D           B           Maybe
D           C           ?
D           D           Yes

Обратите внимание, что хотя ни одна из строк не является дубликатами, некоторые данные являются избыточными.Если A не совместимо с C, то C, очевидно, не совместимо с A. Это делает избыточным один ряд.Причина, по которой у меня есть эти строки для начала, состоит в том, что я построил таблицу, используя вложенный цикл for.Вы бы порекомендовали удалить строки с двойным значением ради экономии места?Или оставить их там (возможно?) Для более легкого обслуживания?

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Пространство дешево ... нет необходимости удалять данные в современном мире.Однако это не значит, что мы не можем быть эффективными.Если бы я рассматривал это как проблему проектирования базы данных, я бы создал две таблицы.

Одна для продуктов

и

Одна для совместимости, которую вы сделали.

Но в приведенном выше примере вы не указываете причину отслеживания несовместимости.Если продукты находятся в таблице совместимости, это означает, что они совместимы ... если они не соответствуют требованиям, это означает, что они несовместимы.

Как вы заполняете эти строки ... вы никогда не приводите причину, по которой вы добавляете строку для A в C, но затем вы также добавляете строку для C в A. Почему вообще добавляется вторая строка?

В какой таблице указаны точные данные в столбцах таблицы для продуктов A и B?Код товара?название продукта?

0 голосов
/ 26 июля 2010

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

Единственное предостережение в том, что в будущем вы должны либо запросить совместимость в каноническом порядке (с более низким продуктом, однако вы определяете это в первом слоте запроса), либо использовать дизъюнктивный запросв противном случае вы можете пропустить законную комбинацию.(Первый из этих вариантов, очевидно, является лучшим решением, поскольку второй вводит ненужные усилия по обработке.)

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