Я нахожусь в процессе создания социальной сети. Это имеет несколько объектов как новости, фотография, которая может иметь комментарии. Так как все комментарии имеют те же столбцы и ведут себя тот же путь, и единственной разницей является их тип — новости, или фотография или что-то еще, чтобы быть добавленной в будущем — я решил составить одну таблицу для всех комментариев с названным столбцом type
. Это работало отлично, пока я не решил добавить внешние ключи к своей схеме базы данных.
comment
таблица имеет столбец parent
, который относится к id
из news
или photo
таблица, в зависимости от столбца type
.
Проблема, я не могу добавить внешний ключ, который отсылает к неизвестному заранее таблицу, и еще больше, который относится к нескольким таблицам сразу.
Целая база данных теперь использует внешние ключи, кроме этого parent
столбец в comment
таблица. Это беспокоит меня, потому что это - единственное место, где я не могу добавить внешний ключ.
Я уверен, что не могу создать такой внешний ключ; что-то в моем проектировании баз данных должно быть изменено. Я решил составить одну таблицу для комментариев, чтобы быть готов добавить новые типы комментария для новых объектов в будущем — видео, музыки, статьи, и т.д. — и не побежал на ад обслуживания, когда я хочу добавить один новый столбец для всех комментариев.
Если я абсолютно должен составить отдельную таблицу для каждого типа комментария, чтобы смочь использовать внешние ключи полностью, я сделаю это. Но возможно другое общее решение этой проблемы уже существует, и я просто не знаю о нем?
Возможно, я должен составить своего рода таблицу ссылки, которая связывается comment
таблица с таблицами других объектов? Но возможно это решение еще более сложно, чем составление отдельной таблицы для каждого типа комментария?
Возможно, у меня должно быть несколько столбцов в comment
таблица, как newsId
, photoId
, к которому я могу добавить внешний ключ?
Эти решения просто не кажутся изящными мне, или я просто неправильно понимаю что-то. Мое целое восприятие этой проблемы могло бы быть просто неправильный. Вот почему я здесь. Совместно используйте свои идеи.
Я бы пошел с «не идиоматическим», хотя я видел примеры таких стилей свободного интерфейса в коде C++.
Это может быть связано с тем, что существует ряд способов решения одной и той же основной проблемы. Обычно проблема, решаемая здесь, заключается в названных аргументах (или, скорее, в их отсутствии). Возможно, более C++ -образным решением этой проблемы может быть Библиотека параметров Boost .
-121--2980835-Это, похоже, правильное поведение.
http://bclary.com/2004/11/07/#a-15.3.4.4
Function.prototype.call - вызываемая функция передается ToObject (thisArg) в качестве этого значения.
ToObject «преобразует свой аргумент в значение типа Object согласно следующему»:
-121--3348318-Последовательность - создает новый объект Последовательности, свойство [[value] которого набора значению последовательности.
Я думаю, что ваша проблема в том, что у вас есть несколько сущностей - новости, фотографии. Но все это только типы (скажем) предметов. Как и комментарии, предметы, вероятно, будут иметь некоторые общие атрибуты, а также некоторые отдельные атрибуты. Одним из этих атрибутов будет возможность комментировать.
В этом подходе имеется таблица CommentureItems
(1) с общими атрибутами. Затем имеются подтаблицы NewsItems
, Фотопредметов
и т.д. Довольно легко настроить ключи для этих таблиц для обеспечения требуемого отношения «один к одному». Очевидно, что Comments имеет внешний ключ, который ссылается на CommentureItems
.
(1) На самом деле я бы, вероятно, застрелился, а не пустил в свою схему таблицу, называемую чем-то столь же ужасным, как CommentureItems
, но это просто ради примера.