Ben*_*cka 24 best-practices stored-procedures naming-convention
我记得在为信息服务硕士学生开设的 DBMS 课程中学习过这样做。为了节省一些输入,您可以输入:
SELECT t1.id, t2.stuff
FROM
someTable t1
INNER JOIN otherTable t2
ON t1.id=t2.id
;
Run Code Online (Sandbox Code Playgroud)
但是......为什么这在存储过程等中是可以接受的?似乎它所做的只是损害了语句的可读性,同时节省了极少的时间。这样做是否有任何功能或逻辑原因?它似乎增加了歧义而不是消除它;我可以看到使用这种格式的唯一可接受的原因是,如果您添加了一个语义上有意义的别名——例如FROM someTable idsTable——当表名不够描述时。
表别名是不好的做法还是只是滥用有用的系统?
Nic*_*mas 39
表别名是一种常见且有用的做法。
以下报告摘录很好地说明了上述所有要点:
INSERT INTO reporting.txns_extract
SELECT
-- 30+ columns snipped
--
-- Would you want to type out full table names for each
-- column here?
FROM
-- ... and in the JOIN conditions here?
billing.financial_transactions ft_cdi -- alias required here
INNER JOIN
billing.cash_application_links cal
ON ft_cdi.key_num = cal.applied_ft_key_num
INNER JOIN
billing.financial_transactions ft_pmt -- alias required here
ON cal.owner_key_num = ft_pmt.key_num
LEFT OUTER JOIN
billing.invoice_lines invl
ON ft_cdi.key_num = invl.invoice_key_num
LEFT OUTER JOIN
billing.charges chrg
ON invl.creator_key_num = chrg.key_num
LEFT OUTER JOIN
billing.customer_services cs
ON chrg.cs_key_num = cs.key_num
INNER JOIN
billing.billers bil
ON ft_cdi.biller_account_key_num = bil.biller_account_key_num
INNER JOIN
billing.formal_entities fe
ON bil.frml_key_num = fe.key_num
WHERE
-- ... and in the WHERE conditions here?
ft_cdi.transaction_type <> 'Payment' -- alias tells me this table is not for payments
AND ft_cdi.status = 'Approved'
AND ft_pmt.transaction_type = 'Payment' -- alias tells me this table is for payments
AND ft_pmt.status = 'Approved'
AND ft_cdi.last_user_date > ft_last_user_date_begin
AND ft_cdi.last_user_date <= ft_last_user_date_end
;
Run Code Online (Sandbox Code Playgroud)
Jas*_*son 12
我认为使用别名有助于查询的可读性,如果表名很长或彼此非常相似,以至于有人快速阅读它可能会误认为它们。你觉得这...
SELECT Really_long_table_name.ID,
Even_longer_table_name_than_before.Name,
Even_longer_table_name_than_before.Description,
Even_longer_table_name_than_before.State
FROM Really_long_table_name
INNER JOIN Even_longer_table_name_than_before
ON Really_long_table_name.ID = Even_longer_table_name_than_before.ID
WHERE Really_long_table_name.Department = 'Whatever'
Run Code Online (Sandbox Code Playgroud)
比这更具可读性吗?
SELECT a.ID,
b.Name,
b.Description,
b.State
FROM Really_long_table_name a
INNER JOIN Even_longer_table_name_than_before b
ON a.ID = b.ID
WHERE a.Department = 'Whatever'
Run Code Online (Sandbox Code Playgroud)
根据您用作表别名的内容,它可以使查询更易于人们阅读和理解。
表别名(为了更短的表名)是不错的做法。
我通常在表名很长时使用它,然后只使用有意义的别名:
SELECT tTable.stuff FROM track_table tTable;
Run Code Online (Sandbox Code Playgroud)
如果要提高可读性,可以使用AS关键字:
SELECT tTable.stuff FROM track_table AS tTable;
Run Code Online (Sandbox Code Playgroud)
但是,当您习惯了语法时,就不需要了。
| 归档时间: |
|
| 查看次数: |
5456 次 |
| 最近记录: |