Использование таблицы голосования БД для многих таблиц аргументов - PullRequest
2 голосов
/ 24 октября 2010

Я пытаюсь понять, правильно ли использовать одну таблицу для голосов за более чем один аргумент:

table_votes
id | vote (±1) | id_user | timestamp | argument_type | argument_id


table_photos // could be argument_type = 1
id | photo_file | photo_name | etc.    


table_house // could be argument_type = 2
id | house_name | etc.

Моя проблема начинается, если я хочу использовать ее для переименования значения таблицы,например, house names, я мог бы создать таблицу для изменения предложений на основе пользовательского соглашения, например, 3 голоса против 5.

table_house_name_suggestion // could be argument_type = 3
id | new_house_name | old_house_name | id_user | timestamp | locked // when votes are enough

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

1 Ответ

0 голосов
/ 24 октября 2010

Создайте таблицу, которая знает обо всех аргументах (PK и FK обозначают первичные и внешние ключи):

vote  { vote_id PK, vote, user_id, timestamp, arg_id FK(arg.arg_id) }
arg   { arg_id PK }
photo { photo_id PK FK(arg.arg_id), photo_file, photo_name, ... }
house { house_id PK FK(arg.arg_id), house_name, ... }

Обратите внимание, что photo_id и house_id на самом деле arg_id с.Единственное потенциальное несоответствие состоит в том, что один аргумент может быть как фотографией, так и домом, поэтому бизнес-уровень должен быть уверен, что этого никогда не произойдет.

Теперь я немного запутался во второй половиневопроса.Тип аргумента указывает на то, что это фотография или дом, верно?Если так, аргумент_тип = 3 предполагает, что house_name_suggestion - это просто еще одна вещь, за которую вы можете проголосовать.Это, конечно, тесно связано с домашним столом, но с точки зрения голосования я бы сказал, что это не имеет значения.Если это так, то вы просто добавляете новую смесь в смесь:

house_name_suggestion { house_name_suggestion_id PK FK(arg.arg_id),
                        house_id FK(arg.arg_id), new_house_name, old_house_name, ... }

Обратите внимание, однако, что я добавил столбец house_id.Хотя я не уверен на 100%, я думаю, что вы использовали столбец id для удвоения в качестве первичного ключа и в качестве ссылки на таблицу домов, что означало бы, что в каждом доме может быть только одно предложение по названию дома.

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

...