Идеальная схема базы данных для похожих структур - PullRequest
4 голосов
/ 24 сентября 2011

В нашем бизнес-приложении нам необходимо хранить сгенерированные пользователем или системой «комментарии» о конкретной сущности. Например, можно создать комментарии о клиенте, заказе или заказе на покупку. Все эти комментарии имеют много одинаковых характеристик, за исключением ссылочной сущности.

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

В настоящее время в приложении имеется отдельная таблица для каждого типа комментариев (например, customer_comments, order_comments, purchaseOrder_comments). Все схемы этих таблиц идентичны в отношении даты, времени, пользователя и текста комментария, но каждая имеет FK для соответствующей таблицы, для которой предназначен комментарий.

Это лучший дизайн или лучший дизайн?

Ответы [ 3 ]

2 голосов
/ 24 сентября 2011

Лично я бы создал одну таблицу комментариев, а затем использовал бы одну таблицу пересечений для каждой сущности (клиента, заказа и т. Д.), Чтобы связать комментарий с сущностью.

enter image description here

1 голос
/ 24 сентября 2011

вы можете поместить все эти комментарии в одну таблицу comments и добавить еще один столбец commented_table, что сделает его полиморфным ManyToOne. некоторые фреймворки / формы (например, ActiveRecord в Rails) имеют встроенную поддержку для этого, если то, что вы используете, не имеет, это в основном так же просто, как добавить еще одно where предложение

1 голос
/ 24 сентября 2011

Если бы это был я, я думаю, у меня была бы одна таблица Comments с дополнительным полем comment_type_id, которое отображает, будет ли комментарий доступен для customer сущностей, order сущностей и т. Д... Где-то еще вам понадобится таблица comment_type, на которую ссылается comment_type_id.

Таким образом, если вы решите добавить дополнительный фрагмент метаданных в комментарии, вам нужно толькосделать это в одной Comments таблице, а не в customer_comments, order_comments и т. д. *

...