В приложении, которое я разрабатываю, происходит время от времени, когда требуется шаблон SuperType/SubType. Моя проблема обычно возникает, когда применяется эксклюзивная специализация подтипов. Эксклюзивность специализации сама по себе может быть легко реализована на уровне языка программирования, поэтому использование шаблона является тривиальной задачей. Однако иногда супер тип не имеет идентификационных свойств (столбцов) от себя - кроме идентификатора, который присутствует в каждой создаваемой таблице. Фактическая идентификация указана в каждой таблице подтипов. По идентификации, я имею в виду комбинацию столбцов с уникальными значениями, например:Таблица супертипов без (идентифицирующих) уникальных свойств
- В
countries
столеname
- В
provinces
столеcountry_id
+name
- В
car_wheels
столеcar_id
+wheel_position
Я узнал, что практически каждая таблица содержит идентифицирующие столбцы.
В моем конкретном случае, у меня есть следующие таблицы:
documents
-----------------------------
id | publicly_accessible
webpage_documents
----------------------------------------------------------
id | document_id | name (as well as certain other properties, too)
ajax_script_documents
-----------------------------
id | document_id | name
pdf_documents
-----------------------------
etc...
Там существуют Relation таблицы, которые ссылаются на documents
и Подтип каждого документа в потенциально получил целую систему суб для своих собственных. Следовательно, шаблон SuperType/SubType.
Как вы можете видеть, таблица documents
содержит булевский столбец publicly_accessible
, который, очевидно, не является идентифицирующим столбцом. Существуют также ситуации, когда даже такая колонка отсутствует. Это означает, что таблица супер-типа содержит только столбец id
, который для меня не только пахнет, но и запутывается при просмотре его содержимого.
Я не могу просто удалить documents
супер типа, так как количество таблиц Подтипа может расти в течение долгого времени, и есть несколько таблиц явно ссылающихся documents
, что будет означать, что количество таблиц, ссылающихся documents
должно быть умножено с количеством подтипов.
Так что в основном я не могу определить столбцы для моей таблицы супер-типа. Любые идеи о том, как перепроектировать/найти полезный идентификационный столбец?
Привет, если бы мой ответ был полезен, было бы очень мило, чтобы вы его проголосовали и/или отметили как принятые, thx! – Shnugo
@Shnugo Я не думаю, что это так, потому что таблица 'documents' ссылается на несколько других таблиц, то есть имеет свою собственную подсистему, которая применяется ко всем подтипам документа. Таким образом, проблема все еще остается. – user2180613
Привет, мне было бы очень интересно, если бы вы могли решить свой вопрос? Приложите здесь немного усилий :-) Если вопрос действительно есть: какие столбцы должны быть частью супер-таблицы и быть уникальным ключевым кандидатом? Может быть, вы должны принять простой ответ: нет ... Я бы добавил столбец типа документа, чтобы сразу узнать, где найти подходящую сущность, возможно, общее имя или путь к файлу. Но все они не являются ключевыми кандидатами сами по себе ... – Shnugo