Как сохранить метаданные по столбцам

Мое решение - добавить css "display: inline-block" в тег img.


ДЕМО: jsfiddle

11
задан JoeCool 7 July 2009 в 14:20
поделиться

9 ответов

Вы можете изменить то, что вы считаете фактическим значением в своем дизайне ... кажется, что факт в ваших данных модель может быть выражена в виде следующего N-кортежа:

Movie | FactType | FactValue | FactSource | FactJournalist

Следующие структуры таблиц должны поддерживать желаемую модель данных, и их относительно легко можно индексировать и объединять. Вы также можете создать представление, которое сводит только значение факта и тип факта, чтобы вы могли создать следующую перспективу:

MovieID | Movie Name | Director | LeadingMale | LeadingFemale | PrimaryVillain | etc

Интересно, что

Table Movie
========================
MovieID   NUMBER, PrimaryKey
MovieName VARCHAR

Table MovieFact
========================
MovieID          NUMBER,  PrimaryKeyCol1
FactType         VARCHAR, PrimaryKeyCol2
FactValue        VARCHAR
FactSource       VARCHAR
FactJournalist   VARCHAR

В этом случае данные вашего вымышленного фильма будут выглядеть следующим образом:

Movie Table
====================================================================================
MovieID  MovieName
====================================================================================
1        Green Lantern
2        The Tick

MovieFact Table
====================================================================================
MovieID  FactType       FactValue         FactSource       FactJournalist
====================================================================================
1        Director       Kubrick           CHUD             Sarah
1        Leading Male   Robert Redford    CHUD             James
1        Leading Female Miley Cyrus       Dark Horizons    James
1        Villain        Hugh Grant        CHUD             Sarah
2        Director       Mel Gibson        Yahoo            Cameron
2        Leading Male   John Lambert      Yahoo            Erica
...
6
ответ дан 3 December 2019 в 10:26
поделиться

Интересный сценарий. Вы можете обойти гетто EAV, думая о своих сущностях как о первоклассных объектах; назовем их Фактами. И помогает то, что в этом случае вы довольно ортогональны, поскольку в каждом фильме есть одни и те же четыре факта. Ваша таблица EAV может быть вашей нетронутой / правильной таблицей, а затем у вас может быть внешний процесс, который добывает эту таблицу и реплицирует данные в правильно нормализованную форму (то есть вашу первую таблицу). Таким образом, у вас есть нужные вам данные с их метаданными, и у вас есть простой способ запрашивать информацию о фильмах с точностью до того, как часто выполняется ваш процесс добычи.

Я думаю, вам определенно понадобится некоторая "выходная информация". база данных "мышца, чтобы убедиться, что данные остаются действительными, так как нет" Кажется, это любой способ в базе данных для поддержания целостности ваших обычных таблиц и таблиц EAV. Я полагаю, что с помощью сложной серии триггеров вы можете добиться чего угодно, но с одним администратором, который "поймет" вашу проблему, вероятно, будет намного легче справиться.

1
ответ дан 3 December 2019 в 10:26
поделиться

Вот еще одна идея ... не стесняйтесь пробивать в ней дыры :)

Table: Movie
Columns: MovieId|Movie|Director|LeadMale|LeadFemale|Villain

Table: MovieSource
Columns: MovieSourceId|MovieId|MovieRoleId|Source|Journalist

Table: MovieRole
Columns: MovieRoleId|MovieRole
Values: 1|Director, 2|LeadMale, 3|LeadFemale, 4|Villain

Я думаю, что столбцы в таблице фильмов могли иметь различные типы (в вашем примере это все строки / varchars, но они могут быть, скажем, числовой информацией или информацией о дате, которая также имеет источник).

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

Таблица MovieRole позволяет вам явно перечислить роли, чтобы вы могли создать надежная связь между источником и данной ячейкой таблицы фильмов.

-Dan

1
ответ дан 3 December 2019 в 10:26
поделиться

Поскольку у вас есть только два поля для исходных данных (Источник и Журналист), я бы порекомендовал таблицу метаданных, подобную этой:

Movie    DirectorSource  DirectorJournalist  LeadingMaleSource  LeadingMaleJournalist ...
---------------------------------------------------------------------------------------
The Tick   Yahoo           Cameron           ...                ...

Это позволит исключить менее важные исходные данные. основной таблицы, но запросы не будут усложнены, и ваш код будет более читабельным.

Я бы посоветовал EAV только если ...

  • У вас более 3 полей исходной мета -data
  • Вам понадобится , чтобы иметь возможность легко добавлять или изменять поля фильма. (изменение типа «Злодей» на «Основной злодей» выполняется несколько раз в день)
1
ответ дан 3 December 2019 в 10:26
поделиться

Мой ответ может показаться слишком философским для SO. Потерпите меня.

Я думаю, что столбец «Источник» - это не предметные данные, а скорее метаданные. На самом деле это данные о том, как мы узнаем некоторые другие данные. Это делает его данными о данных, и это метаданные.

Среди причин, по которым EAV вызывает проблемы, является тот факт, что он смешивает данные и метаданные в одной строке. Бывают случаи, когда я сознательно делал это сам в качестве промежуточного шага к результату, которого я хочу достичь. Но я старался никогда не смешивать данные и метаданные в своих результатах.

Я знаю, почему никогда не делал этого, но не могу объяснить это кратко.

0
ответ дан 3 December 2019 в 10:26
поделиться

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

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

0
ответ дан 3 December 2019 в 10:26
поделиться

Хм .... Я не использовал это, поэтому я говорю не исходя из опыта (т.е. не вините меня, если это не работает), но на первый взгляд это кажется, что вы можете хранить «общие» данные, которые, как вы знаете, всегда будут там, как в обычной таблице, и «метаданные», которые могут изменяться в формате XML. Тогда вопрос в том, как правильно запросить его, и я думаю, вы могли бы сделать это, как описано ЗДЕСЬ .

0
ответ дан 3 December 2019 в 10:26
поделиться

Другой подход, который следует рассмотреть, - это наследование таблицы классов. У Билла Карвина есть отличный обзор вариантов EAV в этом SO-ответе и много хорошего контекста.

0
ответ дан 3 December 2019 в 10:26
поделиться

Я бы принял решение, основываясь на том, что мне нужно кодировать.

Если src / journo - это просто дополнительная информация, я бы выбрал дополнительные столбцы. Но если я знаю, что собираюсь создавать сложные запросы src / journo, я бы выбрал EAV, так как будет легче искать ссылки на журналиста по мета-таблице, чем искать в LeadingFemaleJournalist ] и VillainJournalist и т. д.

Лично я был бы склонен выгружать метаданные src / journo в другую таблицу в стиле EAV, но использовать FK для определения таблицы определения атрибутов. Наличие текстового поля атрибута произвольной формы - верный путь к катастрофе - всегда управляйте своими атрибутами с помощью ограничения. При необходимости могут быть реализованы триггеры для улучшения ссылочной целостности.

Для меня это сводится к точке зрения. Считаете ли вы, что источники и журналисты сами по себе вызывают озабоченность в отношениях, или они просто дополнительные данные, дополняющие Фильм ? Следующим уровнем уточнения будет создание различных таблиц для MovieDataSource и MovieDataJournalist , которые могут позволить вам сопоставить FK с таблицами, определяющими действительные источники и Журналисты (и дополнительная информация об этих Источниках / Журналистах может быть конкретизирована). Здесь вы должны установить связь «многие ко многим» между объектом Movie и объектом Source (а также Journalist ).

]
0
ответ дан 3 December 2019 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: