Liquibase ha due modi per definire una colonna come unici:Con Liquibase, c'è una differenza tra l'utilizzo di un unico <createIndex> e l'utilizzo di <column> con un vincolo univoco?
Quando si crea la tabella, utilizzando
<constraints>
sulla colonna:<createTable tableName="my_table"> <column name="my_column"> <constraints unique="true" uniqueConstraintName="my_table_my_column_uk"> </column> </createTable>
Dopo aver creato la tabella, utilizzando
<createIndex>
:<createTable tableName="my_table"> <column name="my_column"/> </createTable> <createIndex tableName="my_table" unique="true" indexName="my_table_my_column_uk"> <column name="my_column"/> </createIndex>
C'è qualche differenza tra questi due approcci per le chiavi univoche a colonna singola?
Nelle mie osservazioni con MySQL, sembra non esserci differenza. Entrambe le dichiarazioni (sopra) produrre lo stesso risultato SHOW CREATE TABLE
:
...
UNIQUE_KEY `my_table_my_column_uk` (`my_column`)
...
Tuttavia, lo fa valere per tutte le implementazioni di database , o fa <createIndex unique="true">
generare output schema diverso da <constraint unique="true"/>
per diversi database?
Background: Ho uno script che ha creato il changelog di liquibase direttamente dal mio modello relazionale nel codice. Lo script di generazione creava ENTRAMBE le dichiarazioni se il modello indicava che la colonna era unica. Sto pulendo i risultati generati e vorrei rimuovere una delle dichiarazioni, e voglio sapere se è appropriato.
Non credo che installerò alcuna chiave esterna che faccia riferimento a chiavi univoche, quindi non dovrebbe essere un problema. Ma grazie per l'informazione; Farò qualche ricerca aggiuntiva con chiavi/vincoli univoci su database diversi per vedere se le mie modifiche sarebbero problematiche. –