Существуют ли базы данных, где таблицы не имеют связей между собой?

Ответ

Да, существуют. Отсутствие явных связей между коллекциями/таблицами характерно для NoSQL баз данных и некоторых архитектурных подходов в реляционных СУБД.

1. NoSQL базы данных (документные, ключ-значение, колоночные):

  • MongoDB (документная): Данные хранятся в независимых коллекциях документов. Связи обычно моделируются через вложение документов или ссылки (ObjectId), но внешние ключи и JOIN'ы как в SQL отсутствуют.
    // Коллекция 'users' (независима)
    db.users.insertOne({ _id: "user_1", name: "Alice", email: "alice@example.com" });
    // Коллекция 'logs' (независима)
    db.logs.insertOne({ _id: ObjectId(), event: "login", userId: "user_1", timestamp: ISODate() });
    // Связь между 'users' и 'logs' существует только на логическом уровне приложения.
  • Cassandra, Redis: Таблицы (или структуры) также проектируются независимо под конкретные запросы.

2. Реляционные (SQL) базы данных:

  • Таблицы могут существовать без объявленных внешних ключей (FOREIGN KEY). Связь между данными в этом случае поддерживается только на уровне логики приложения.
  • Это часто встречается в схемах типа «звезда» (star schema) для хранилищ данных (Data Warehouse), где есть большая факт-таблица, окруженная независимыми справочными таблицами (dimensions).

Ответ 18+ 🔞

А, ну ты про базы данных, да? Вот это поворот, блядь! Так, слушай сюда, я тебе сейчас такую простыню накатаю, что ты офигеешь, как от Герасима с Муму.

Так вот, да, существуют такие базы, где всё живёт само по себе, как соседи по лестничной клетке, которые друг друга в гробу видали. Это, блядь, в основном NoSQL царство и некоторые извращения в обычных SQL-ках.

1. NoSQL — это вообще отдельная песня, ёпта.

  • MongoDB (документная): Представь себе, блядь, кучу ящиков. В одном ящике — пользователи, в другом — логи их действий. И эти ящики нихуя не знают друг о друге. Связь? Какая, нахуй, связь? Ты сам, как разработчик, должен помнить, что вот этот userId в логах — это про того чувака из ящика с пользователями. А база тебе в этом не помощник, она тебе JOIN'ов не даст, как SQL. Чистая анархия, блядь!
    // Ящик 'users' — живёт своей жизнью, блядь.
    db.users.insertOne({ _id: "user_1", name: "Alice", email: "alice@example.com" });
    // Ящик 'logs' — тоже похуй на всех.
    db.logs.insertOne({ _id: ObjectId(), event: "login", userId: "user_1", timestamp: ISODate() });
    // Связь? Да ты шутишь! Это только в твоей, блядь, голове связь.
  • Cassandra, Redis: Тут вообще, блядь, каждая таблица заточена под конкретный запрос, как одноразовый шприц. Спроектировал под одну задачу — и живи с этим. О связях думает тот, кто это проектировал, а база — просто тупое хранилище.

2. Ну и наши, родные, SQL-базы.

Тут, конечно, поинтереснее. Можно сделать таблицы и не объявлять внешние ключи (FOREIGN KEY). Вообще. Никаких. Представь: у тебя таблица заказы и таблица клиенты. И в заказах просто лежит client_id. А база даже не в курсе, что это за хуйня и есть ли такой клиент вообще. Всё на твоей совести, разработчик! Пиздец, да?

Особенно это любят в хранилищах данных (Data Warehouse), в этих схемах «звезда». Там есть одна жирная факт-таблица, а вокруг неё вертятся справочники (dimensions). И они могут быть абсолютно независимыми, блядь, сущностями. Каждый сам за себя, как в джунглях.

Вот так-то, дружок. Мир баз данных — он разный, блядь. Есть где всё по струнке, с связями и ограничениями, а есть — полный бардак и анархия, где ты сам царь и бог. Выбирай, что душе угодно, только потом не жалуйся, что данные поехали куда-то не туда.