2013-08-02 2 views
12

В ответ на вопрос this Я узнал, что вы можете создать пустую таблицу в PostgreSQL.Зачем создавать пустые строки (без строк, без столбцов) в PostgreSQL

create table t(); 

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

ответ

7

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

1. Одно практическое использование создания таблицы, прежде чем добавлять пользователей определенные столбцы с ним в том, что она позволяет быстро перебирать при создании новой системы или просто делать быстрые итерации Dev в целом.

2. Вид больше 1, но позволяет гасят таблицы, приложение логика или процедура может сделать ссылку тоже, даже если столбцы имеют еще поставить на месте.

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

Все это удобно, и я пропускаю их, когда не работаю в PostgreSQL.

4

Это не пустой стол - только пустой результат. Строки PostgreSQL содержат некоторые невидимые (по умолчанию) столбцы. Я не уверен, но это может быть артефакт из темного возраста, когда Postgres была объектной реляционной базой данных - и PG поддерживал язык POSTQUEL. Эта пустая таблица может работать как абстрактный предок в иерархии классов.

List of system columns

+0

темный возраст из-за POSTQUEL или из-за реляционной части объекта? Postgres по-прежнему является реляционной базой данных, и многие считают, что это хорошо. –

+0

@Adam Если вы думаете об объектно-ориентированной концепции объекта, то Postgresql не является объектным реляционным –

+0

@AdamGent «Темный возраст» для меня не является отрицательным. Многие концепции Stonebraker были действительно блестящими, хотя я не являюсь поклонником QUEL или поклонником каких-то незнакомых концепций (например, наследуемости) в текущем PostgreSQL. –

4

Я не знаю точной причины его включения в PostgreSQL, но в теории реляционной алгебры, в которой SQL (в широком смысле) играет роль таблица с нулевым столбцом, а точнее отношение нулевой атрибут, исходя из.

В частности, отношение нулевого атрибута без кортежей (в терминах SQL, таблица без столбцов и без строк) является реляционным эквивалентом нуля или false, а отношение без атрибутов, кроме одного кортежа (SQL: no столбцы, но одна строка, что невозможно в PostgreSQL, насколько я знаю) является истинным или одним. Хью Дарвен, откровенный сторонник теории отношений и критик SQL, назвал эти «Table Dum» и «Table Dee» соответственно.

В нормальной алгебре x + 0 == x и x * 0 == 0, тогда как x * 1 == x; идея заключается в том, что в реляционной алгебре Table Dum и Table Dee могут использоваться в качестве аналогичных примитивов для объединений, объединений и т. д.

PostgreSQL внутренне ссылается на таблицы (а также представления и последовательности) как «отношения», поэтому, хотя он ориентирован на реализацию SQL, который не определен подобной чистой алгеброй отношений, могут быть элементы этого в своем дизайне или истории.

2

Я не думаю, что мое предназначено для использования, но в последнее время я использовал пустую таблицу в качестве блокировки для представления, которое я создаю и динамически изменяю с помощью EXECUTE. Функция, которая создает/заменяет представление, имеет ACCESS EXCLUSIVE в пустой таблице, а другие функции, которые используют представление, имеют ACCESS.

Смежные вопросы