1: Без ссылочной целостности какие характеристики или другие проблемы у меня есть?
У вас возникнут проблемы со ссылочной целостностью. Вам придется либо жить с этими проблемами, либо реализовать имитацию всех ограничений ссылочной целостности в коде приложения или посредством административных процедур (например, отчетов).
Вы также значительно увеличите размер своей таблицы «примечаний». 100 тысяч строк в каждой из 100 таблиц бесплатных заметок довольно управляемы. Но 10 миллионов строк в одной таблице заметок могут заставить вас пересмотреть, стоит ли жить.
Внедрение имитации ограничений целостности в коде приложения означает, что рано или поздно кто-то (возможно, вы) пошаговое приложение и измените строки через клиент командной строки dbms или клиент gui. Вы можете сделать лот повреждений таким образом. Здравый смысл - это проверить или сбросить базу данных, прежде чем принимать такой риск, но 10 миллионов строк заметок делают менее вероятным, что вы это сделаете.
2: Это вызывает проблемы с масштабируемостью?
Он может. Если у вас есть 100 отдельных таблиц заметок, каждый из них может вырасти до 100 000 строк и по-прежнему быстро отвечать на запросы.Поместите их все в один стол, и теперь у вас есть 10 миллионов строк. И поскольку они представляют собой заметки, меньшее количество будет помещаться на странице. Это обычно означает более медленную скорость. При таком дизайне единая таблица заметок становится холодным местом (или горячей точкой, в зависимости от того, как вы на нее смотрите), замедляя каждую таблицу, в которой используются заметки, а не только одна или две сильно аннотированные таблицы.
И после того, как вы проживаете с более медленной скоростью на всех столах в течение нескольких месяцев, вы, вероятно, снова разделите эту таблицу монстров на исходные таблицы.
3: Есть ли элегантное решение?
Если каждая нота должна иметь одинаковую максимальную длину - довольно маловероятное требование для 100 столов заметок - затем создайте домен для заметок и создайте одну таблицу заметок для каждой аннотированной таблицы.
create domain note_text as varchar(1000) not null;
create table user_notes (
user_id integer not null references users (user_id) on delete cascade,
note_timestamp timestamp not null default current_timestamp,
user_note note_text,
primary key (user_id, note_timestamp)
);
В стороне, вам нужно быть очень внимательным, чтобы пользователи могли комментировать строки. Они часто (обычно?) Используют столбцы примечаний вместо размещения данных там, где они принадлежат. Например, если у вас есть таблица телефонных номеров пользователей, то столбец примечаний почти наверняка закончится линией данных.
Call 123-456-7890 between 8:00 am and 5:00 pm. (And that will match
none of this user's phone numbers.)
Toll-free orders at 1-800-123-4567.
He eats lunch at McDonald's on Tuesdays.