Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 338
Здравствуйте!

Скажите можно ли в Liquibase описать внешние ключи (Foregen key) без создания дополнительных таблиц?
Вот делаю вот так и создаются доп таблицы:
<changeSet id="1.0.0" author="vs">
        <createTable tableName="users">
            <column name="Id_users" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>

            <column name="login" type="VARCHAR(100)">
                <constraints nullable="false" unique="true"/>
            </column>
            <column name="password" type="VARCHAR(1000)">
                <constraints nullable="false"/>
            </column>
            <column name="word_coder" type="VARCHAR(50)">
                <constraints nullable="false"/>
            </column>
            <column name="status" type="VARCHAR(25)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
            <column name="email" type="VARCHAR(256)">
                <constraints nullable="false" unique="true"/>
            </column>
            <column name="first_name" type="VARCHAR(100)">
                <constraints nullable="false"/>
            </column>
            <column name="last_name" type="VARCHAR(100)">
                <constraints nullable="false"/>
            </column>
            <column name="created" type="TIMESTAMP" defaultValue="CURRENT_TIMESTAMP()">
                <constraints nullable="false"/>
            </column>
            <column name="updated" type="TIMESTAMP" defaultValue="CURRENT_TIMESTAMP()">
                <constraints nullable="false"/>
            </column>

        </createTable>
    </changeSet>

    <changeSet id="1.0.1" author="vs">
        <createTable tableName="roles">
            <column name="id_roles" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="VARCHAR(100)">
                <constraints nullable="false" unique="true"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="1.0.2" author="vs">
        <createTable tableName="user_roles">
            <column name="id_user_roles" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="user_id" type="BIGINT">
            </column>
            <column name="role_id" type="BIGINT">
            </column>
        </createTable>
    </changeSet>

<changeSet id="1.0.4" author="vs">
        <addForeignKeyConstraint baseColumnNames="user_id"
                                 baseTableName="user_roles"
                                 constraintName="fk_user_roles_user"
                                 onDelete="CASCADE"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="Id_users"
                                 referencedTableName="users"/>
    </changeSet>

    <changeSet id="1.0.5" author="vs">
        <addForeignKeyConstraint baseColumnNames="role_id"
                                 baseTableName="user_roles"
                                 constraintName="fk_user_roles_roles"
                                 onDelete="CASCADE"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="id_roles"
                                 referencedTableName="roles"/>
    </changeSet>


В оф доках указывается именно такой метод https://docs.liquibase.com/change-types/community/add-foreign-key-constraint.html

Сообщение было отредактировано: 17 окт 20, 13:34
17 окт 20, 13:37    [22215888]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
graycode
Member

Откуда:
Сообщений: 212
Vlad__i__mir
создаются доп таблицы:

Какие из них по вашему мнению ненужные доп таблицы?
17 окт 20, 14:07    [22215900]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
mayton
Member

Откуда: loopback
Сообщений: 49319
Автор что то путает. Liquibase создаёт автоматически только две служебные таблицы для трекинга версий и сессий.

Остальное 100% создаётся руками разработчика.

Возможно автор увидел служебные таблицы ORM hibernate для поддержки sequence и подумал что это создано liquibase?
17 окт 20, 14:51    [22215925]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 338
graycode, mayton, те таблицы, которых не было бы, если бы создавалось с помощью обычного sql-скрипта

К сообщению приложен файл. Размер - 7Kb


Сообщение было отредактировано: 17 окт 20, 16:54
17 окт 20, 16:56    [22215972]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1098
Vlad__i__mir
graycode, mayton, те таблицы, которых не было бы, если бы создавалось с помощью обычного sql-скрипта

Никак не убрать. Это служебные таблицы Liquibase-a. Это нормально.
17 окт 20, 17:05    [22215974]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1098
Vlad__i__mir
graycode, mayton, те таблицы, которых не было бы, если бы создавалось с помощью обычного sql-скрипта

Хотя можно убрать - не используйте Liquibase и таблиц не будет.

В этих таблицах Liquibase хранит свои данные касательно изменений БД.
17 окт 20, 17:06    [22215976]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
graycode
Member

Откуда:
Сообщений: 212
Vlad__i__mir,

Служебная таблица, вот описание databasechangelog
17 окт 20, 17:08    [22215977]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
mayton
Member

Откуда: loopback
Сообщений: 49319
Вторая таблица - databasechangeloglock предназначена для предотвращения "двойного" запуска
liquibase update в том случае когда первый сеанс обновления подвис или работает долго и в это
время второй разработчик вручную или используя CI средства (косвенно) запустил точно такой-же
процесс.
17 окт 20, 17:14    [22215981]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 338
mayton
Вторая таблица - databasechangeloglock предназначена для предотвращения "двойного" запуска
liquibase update в том случае когда первый сеанс обновления подвис или работает долго и в это
время второй разработчик вручную или используя CI средства (косвенно) запустил точно такой-же
процесс.

А если после успешного создания таблиц удалить их и не запускать повторно liquibase, бд нормально будет функционировать?
17 окт 20, 17:30    [22215982]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
mayton
Member

Откуда: loopback
Сообщений: 49319
Vlad__i__mir
mayton
Вторая таблица - databasechangeloglock предназначена для предотвращения "двойного" запуска
liquibase update в том случае когда первый сеанс обновления подвис или работает долго и в это
время второй разработчик вручную или используя CI средства (косвенно) запустил точно такой-же
процесс.

А если после успешного создания таблиц удалить их и не запускать повторно liquibase, бд нормально будет функционировать?

Я ценю твоё творческое любопытство. Помнишь анекдот про бензопилу и русских мужиков?

У комплекса liquibasе есть юзкейс. Если ты его не собираешся использовать - то просто не используй.
17 окт 20, 17:38    [22215985]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли в Liquibase описать внешние ключи без создания дополнительных таблиц  [new]
Zzz79
Member

Откуда:
Сообщений: 762
Vlad__i__mir
mayton
Вторая таблица - databasechangeloglock предназначена для предотвращения "двойного" запуска
liquibase update в том случае когда первый сеанс обновления подвис или работает долго и в это
время второй разработчик вручную или используя CI средства (косвенно) запустил точно такой-же
процесс.

А если после успешного создания таблиц удалить их и не запускать повторно liquibase, бд нормально будет функционировать?

ликвибейс проливает скрипты и далее никаким образом не влияет на все что в бд творится
соотсвтенно если ты после запуска - удалишь таблицы - работать все будет норм
но при последующем старте они все равно создадутся
17 окт 20, 17:43    [22215987]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить