|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +# create MySQL |
| 4 | +docker rm -f test_mysql && docker run --name test_mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -p 3306:3306 -p 33060:33060 -id mysql:latest && sleep 10 && docker exec -i test_mysql mysql -uroot -proot -e "\ |
| 5 | + CREATE TABLE testdb.user ( \ |
| 6 | + id INT AUTO_INCREMENT PRIMARY KEY, \ |
| 7 | + username VARCHAR(64) NOT NULL COMMENT 'Username, required', \ |
| 8 | + password VARCHAR(128) NOT NULL, \ |
| 9 | + email VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'User email, required', \ |
| 10 | + first_name VARCHAR(64) COMMENT 'First name of the user', \ |
| 11 | + last_name VARCHAR(64) COMMENT 'Last name of the user', \ |
| 12 | + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Record creation timestamp', \ |
| 13 | + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Record update timestamp', \ |
| 14 | + status ENUM('active', 'inactive', 'suspended') DEFAULT 'active' COMMENT 'Account status', \ |
| 15 | + INDEX idx_name (username), \ |
| 16 | + UNIQUE INDEX idx_email (email), \ |
| 17 | + INDEX idx_status_created (status, created_at), \ |
| 18 | + INDEX idx_full_name (first_name, last_name) \ |
| 19 | + ) COMMENT='User account information';" |
| 20 | + |
| 21 | +# create PostgreSQL |
| 22 | +docker rm -f test_postgres && docker run --name test_postgres -e POSTGRES_USER=root -e POSTGRES_PASSWORD=root -e POSTGRES_DB=testdb -p 5432:5432 -id postgres:latest && sleep 5 && docker exec -i test_postgres psql -U root -d testdb -c "\ |
| 23 | + CREATE TABLE \"user\" ( \ |
| 24 | + id SERIAL PRIMARY KEY, \ |
| 25 | + username VARCHAR(64) NOT NULL, \ |
| 26 | + password VARCHAR(128) NOT NULL, \ |
| 27 | + email VARCHAR(128) NOT NULL DEFAULT '', \ |
| 28 | + first_name VARCHAR(64), \ |
| 29 | + last_name VARCHAR(64), \ |
| 30 | + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, \ |
| 31 | + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, \ |
| 32 | + status VARCHAR(9) DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'suspended')), \ |
| 33 | + CONSTRAINT unique_email UNIQUE (email) \ |
| 34 | + ); \ |
| 35 | + CREATE INDEX idx_name ON \"user\" (username); \ |
| 36 | + CREATE INDEX idx_status_created ON \"user\" (status, created_at); \ |
| 37 | + CREATE INDEX idx_full_name ON \"user\" (first_name, last_name); \ |
| 38 | + COMMENT ON COLUMN \"user\".username IS 'Username, required'; \ |
| 39 | + COMMENT ON COLUMN \"user\".email IS 'User email, required'; \ |
| 40 | + COMMENT ON COLUMN \"user\".first_name IS 'First name of the user'; \ |
| 41 | + COMMENT ON COLUMN \"user\".last_name IS 'Last name of the user'; \ |
| 42 | + COMMENT ON COLUMN \"user\".created_at IS 'Record creation timestamp'; \ |
| 43 | + COMMENT ON COLUMN \"user\".updated_at IS 'Record update timestamp'; \ |
| 44 | + COMMENT ON COLUMN \"user\".status IS 'Account status'; \ |
| 45 | + COMMENT ON TABLE \"user\" IS 'User account information';" |
| 46 | + |
| 47 | +# create MSSQL |
| 48 | +docker rm -f test_sqlserver && \ |
| 49 | +docker run --name test_sqlserver -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD=Sa123456.. -p 1433:1433 -id mcr.microsoft.com/mssql/server:2022-latest && sleep 10 && \ |
| 50 | +docker exec -i test_sqlserver /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Sa123456..' -No -Q "CREATE DATABASE testdb;" && \ |
| 51 | +docker exec -i test_sqlserver /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Sa123456..' -No -d 'testdb' -Q "\ |
| 52 | + CREATE TABLE [user] ( |
| 53 | + id INT IDENTITY (1,1) PRIMARY KEY, |
| 54 | + username NVARCHAR(64) NOT NULL, |
| 55 | + password NVARCHAR(128) NOT NULL, |
| 56 | + email NVARCHAR(128) NOT NULL DEFAULT '', |
| 57 | + first_name NVARCHAR(64), |
| 58 | + last_name NVARCHAR(64), |
| 59 | + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, |
| 60 | + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, |
| 61 | + status NVARCHAR(9) DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'suspended')), |
| 62 | + deleted_at DATETIME NULL, |
| 63 | + CONSTRAINT unique_email UNIQUE (email) |
| 64 | + ); \ |
| 65 | + CREATE INDEX idx_name ON [user] (username); \ |
| 66 | + CREATE INDEX idx_status_created ON [user] (status, created_at); \ |
| 67 | + CREATE INDEX idx_full_name ON [user] (first_name, last_name); \ |
| 68 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'User account information', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user'; \ |
| 69 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'Username, required', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user', @level2type = N'COLUMN', @level2name = 'username'; \ |
| 70 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'User email, required', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user', @level2type = N'COLUMN', @level2name = 'email'; \ |
| 71 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'First name of the user', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user', @level2type = N'COLUMN', @level2name = 'first_name'; \ |
| 72 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'Last name of the user', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user', @level2type = N'COLUMN', @level2name = 'last_name'; \ |
| 73 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'Record creation timestamp', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user', @level2type = N'COLUMN', @level2name = 'created_at'; \ |
| 74 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'Record update timestamp', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user', @level2type = N'COLUMN', @level2name = 'updated_at'; \ |
| 75 | + EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'Account status', @level0type = N'SCHEMA', @level0name = 'dbo', @level1type = N'TABLE', @level1name = 'user', @level2type = N'COLUMN', @level2name = 'status';" |
0 commit comments