Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:02:57 +08:00
commit daf63b8e96
9 changed files with 1543 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
//// -- LEVEL 1
//// -- Schemas, Tables and References
// Creating tables
// You can define the tables with full schema names
Table ecommerce.merchants {
id int
~country_code
merchant_name varchar
"created at" varchar
admin_id int [ref: > U.id, not null]
Indexes {
(id, country_code) [pk]
}
}
// If schema name is omitted, it will default to "public" schema.
Table users as U {
id int [pk, increment] // auto-increment
full_name varchar
created_at timestamp
~country_code
}
Table countries {
code int [pk]
name varchar
continent_name varchar
}
TablePartial country_code {
country_code int [ref: > countries.code]
}
//----------------------------------------------//
//// -- LEVEL 2
//// -- Adding column settings
Table ecommerce.order_items {
order_id int [ref: > ecommerce.orders.id] // inline relationship (many-to-one)
product_id int
quantity int [default: 1] // default value
Indexes {
(order_id, product_id) [pk]
}
}
Ref: ecommerce.order_items.product_id > ecommerce.products.id
Table ecommerce.orders {
~auto_id
user_id int [not null, unique]
status varchar
created_at varchar [note: 'When order created'] // add column note
}
//----------------------------------------------//
//// -- Level 3
//// -- Enum, Indexes
// Enum for 'products' table below
Enum ecommerce.products_status {
out_of_stock
in_stock
running_low [note: 'less than 20'] // add column note
}
// Indexes: You can define a single or multi-column index
Table ecommerce.products {
~auto_id
name varchar
merchant_id int [not null]
price int
status ecommerce.products_status
created_at datetime [default: `now()`]
Indexes {
(merchant_id, status) [name:'product_status']
id [unique]
}
}
Table ecommerce.product_tags {
~auto_id
name varchar
}
Table ecommerce.merchant_periods {
~auto_id
merchant_id int
~country_code
start_date datetime
end_date datetime
}
TablePartial auto_id {
id int [pk]
}
// Creating references
// You can also define relationship separately
// > many-to-one; < one-to-many; - one-to-one; <> many-to-many
Ref: ecommerce.products.merchant_id > ecommerce.merchants.id // many-to-one
Ref: ecommerce.product_tags.id <> ecommerce.products.id // many-to-many
// Composite foreign key
Ref: ecommerce.merchant_periods.(merchant_id, country_code) > ecommerce.merchants.(id, country_code)
Ref user_orders: ecommerce.orders.user_id > public.users.id

View File

@@ -0,0 +1,27 @@
Table follows {
following_user_id integer
followed_user_id integer
created_at timestamp
}
Table users {
id integer [primary key]
username varchar
role varchar
created_at timestamp
}
Table posts {
id integer [primary key]
title varchar
body text [note: 'Content of the post']
user_id integer [not null]
status varchar
created_at timestamp
}
Ref user_posts: posts.user_id > users.id // many-to-one
Ref: users.id < follows.following_user_id
Ref: users.id < follows.followed_user_id