Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Есть таблица user , в которой располагаются пользователи Есть таблица item с товарами. И есть таблица rating , в которой содержатся выставленные пользователями оценки товарам. Предполагается, что каждый пользователь может выставить только одну оценку тому или иному товару. Вопросы: 1. Каким образом можно обеспечить уникальность записей в таблице рейтинга? Имеется в виду выполнение условия "каждый пользователь может выставить только одну оценку тому или иному товару". 2. Нужен ли в таблице рейтинга дополнительный индекс (обычно с автоинкрементом)? Он же primary key. На скриншоте отсутствует. 3. Рейтинг товара не может существовать сам по себе, он обязательно выставляется пользователем. Должна в этом случае связь между таблицей пользователей и таблицей рейтингов быть идентифицирующей ? На скриншоте она таковой не является. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 20:21 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
sameuser, 1) составной PK 2) зачем? 3) неясен вопрос. Два FK нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 20:43 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
Кроме составного внешнего ключа есть другие варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 21:14 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
sameuser, как и главное куда вы собрались вешать составной внешний ключ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 21:19 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
Я ничего не собирался вешать. Вопросы темы перечислены в первом сообщении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 22:10 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
sameuserКроме составного внешнего ключа есть другие варианты?Индексы (в т.ч.составные), в т.ч. обслуживающие внешние ключи - единственный штатный механизм контроля и поддержания целостности и непротиворечивости информации. Любые "другие варианты" - это квадратноколёсый велосипед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 22:26 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
Подскажите, как создать составной ключ в таблице rating , используя внешние ключи fk_user_id и fk_item_id ? В этом случае, если я правильно понимаю, нельзя будет добавить в таблицу rating запись, которая в ней уже существует: Код: css 1. 2. 3. 4. 5. 6. 7. 8. Именно это поведение мне и нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2017, 20:21 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
Ошибся малость.. Хреново, что нельзя редактировать сообщения. Код: css 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2017, 20:23 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
sameuser1. Каким образом можно обеспечить уникальность записей в таблице рейтинга? Имеется в виду выполнение условия "каждый пользователь может выставить только одну оценку тому или иному товару". ...двойной уникальный ключ в который входят оба внешние референсы на юзера и на товар... ...по совместительстру такой ключ может быть и основным ключом таблицы (но не обязательно, ибо таблица может иметь другой ключ, типа автоинкренет) ...алтернативно, такое базнес-правило может отрабатывать на клиенте... ...алтернативно такое бизнес правило может отрабатыватся тригером на вставку... ...алтернативно такое можте отрабатыватся МЕРЖЕ-ИНСЕРТ СКЛ на вставке.... ...последние 3 варианта не рекомендуются но все же легитимны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2017, 22:18 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
sameuser2. Нужен ли в таблице рейтинга дополнительный индекс (обычно с автоинкрементом)? Он же primary key. На скриншоте отсутствует. ...для стабильной базы -- нет ...с точки зрения ДБА -- нет ...с точки зрения клиентского кода -- часто клиентские фрейворки "любят" ПК на одну колонку. Некоторые фрейворки потребуют дополнительный код для работы с мнобо-полевым ПК ...иногда ДБ архитекторы предпочитают прописать в стандарте проектирования что бы ВСЕ таблицы имели ИНТЕГЕР аутоикренет ПК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2017, 22:23 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
sameuser3. Рейтинг товара не может существовать сам по себе, он обязательно выставляется пользователем. Должна в этом случае связь между таблицей пользователей и таблицей рейтингов быть идентифицирующей ? На скриншоте она таковой не является. ...на логическом уровне конечно эта связа есть "иденцифицируюшая" ...на физическом уровне она может входить в ПК или в ФК NOT NULL , как показано в моем предыдущем посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2017, 22:29 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
Использование фреймворков не планируется ( там черт ногу сломит, понагородили столько, что проще самому написать. Особенно yii2 - мрак ). На мой взгляд, конечно.. Кому-то, может, наоборот нравится работать в такой среде.. Спасибо за подробные ответы. автор...двойной уникальный ключ в который входят оба внешние референсы на юзера и на товар... ALTER TABLE `rating` ADD UNIQUE (fk_user_id, fk_item_id); Синтаксис верный? В MySQL Workbench я не нашел GUI-функционал, который помогает это создать. В этом случае при добавлении уже имеющейся записи произойдет ошибка, верно? Записи, которая содержит fk_user_id, fk_item_id, которые уже были внесены ранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2017, 01:20 |
|
||
|
Пару вопросов о проектировании на простом примере из 3-х таблиц
|
|||
|---|---|---|---|
|
#18+
>> Использование фреймворков не планируется ( там черт ногу сломит, понагородили столько, что проще самому написать. Особенно yii2 - мрак ). На мой взгляд, конечно.. Кому-то, может, наоборот нравится работать в такой среде.. если других аргуметнов нет, и вы единственый кто будет кодировать клиентски код -- то делайте как вам самому удобно. >> Спасибо за подробные ответы. всегда пожалуйста ... >> ALTER TABLE `rating` ADD UNIQUE (fk_user_id, fk_item_id); >> Синтаксис верный? кажется верный, я не помню точно, посмотрите в справочнике или просто проверте прогоном... Так можено но имя констраин или имя индекса будет сгенерировано. так тоже можно: ALTER TABLE `rating` ADD CONSTRAIN IDX_3456 UNIQUE (fk_user_id, fk_item_id); >> В MySQL Workbench я не нашел GUI-функционал, который помогает это создать. в МыСКЛ-е уникалость делается как уникальный индекс -- функционал создания которого находится в ИНДЕКС табе... >> В этом случае при добавлении уже имеющейся записи произойдет ошибка, верно? Записи, которая содержит fk_user_id, fk_item_id, которые уже были внесены ранее. ...ну да.... ...хотя зачем вам мне верить -- быстрее проверить прямо на базе :-) CREATE TABLE IF NOT EXISTS `test` ( `id` INT NOT NULL , `col1` INT NOT NULL , `col2` INT NOT NULL , PRIMARY KEY (`id`) , UNIQUE INDEX `index2` USING BTREE (`col1` ASC, `col2` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Data for table `mydb`.`test` -- ----------------------------------------------------- START TRANSACTION; USE `mydb`; INSERT INTO `mydb`.`test` (`id`, `col1`, `col2`) VALUES (1, 2, 2); INSERT INTO `mydb`.`test` (`id`, `col1`, `col2`) VALUES (2, 2, 2); COMMIT; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2017, 07:20 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39549246&tid=1830253]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 150ms |

| 0 / 0 |
