Database tasarımı hakkında

Selamlar, bir proje için database tasarlamam gerekiyor fakat tam olarak nasıl yapmalıyım karar veremedim.
Proje turizm ajansları için yazılan bir proje. Turizm ajanslarının satışını yaptığı birden fazla otel var. Bu otelleri birden fazla booking sitesinde yayınlıyorlar ve oradan satış yapıyorlar. Bu booking siteleri de her otele kendi içlerinde bir id veriyor. Örneğin;

hotel_name           hotel_id
Forum Hotel          17532
Yazbel Hotel         982341

gibi, bazı ajanslar otellerinin hangi booking sitesinde hangi id ile tutulduğunu bilmek istiyor. bunun için de küçük bir web servisi yazıyoruz. Burada bana “şimdilik bir db tasarlamaya çalış, yetersiz görülürse zamanla üzerinde konuşup geliştirmeye çalışalım” dendi. Aşağıdaki gibi bir diagram çıkarttım ama ne kadar sağlıklı bilemiyorum. Fikirleriniz nelerdir?


Yukarıda providers tablosu booking sitelerini tutacak.

Booking sitelerinin verdikleri ID’ler provider_hotel_code, degil mi?

Gayet guzel bir sekilde tasarlanmis, ellere saglik. Normalizasyon, turler filan yerli yerinde. (is_active boolean olacak sanki.)

Sadece password’un salt’u icin bir kolon goremedim.

Not: timestamp'leri hayata gecirirken timestamp with time zone yapmayi unutmayin.

1 Beğeni

Evet hocam tam olarak dediğiniz gibi

evet orada küçük bi karışıklık olmuş :slight_smile:

Çalıştığım şirket hiç salt koymadığından ben de “galiba çok yaygın kullanılan bi teknik değil” diyerek ben de hiçbir projemde salt koymuyorum ama gerekliyse elbette koyarım teşekkürler öneri için, timestamp konusunda da normalde with time zone yapıyorum ama bu dbdiagram sitesine pek hakim değilim timestamp yazıp geçmiştim.

Password’u plaintext mi tutuyorlar yoksa?

Password hashing icin tasarlanmis KDF’leri (bcrypt, scrypt, argon2) kullanmak lazim.

1 Beğeni

bcrypt ile şifreliyoruz fakat salting yapmıyoruz hocam. Yani en azından benim çalıştığım projelerde durum böyleydi.

bcrypt’in girdilerinden biri salt! Sabit kullaniyor olabilirsiniz. Ciktisi da hash bu arada, sifreli text degil.

Şöyle bir yol izlemişiz. Konu hakkında çok bilgim olmadığından yanlış bir şey de söylemek istemiyorum açıkçası.

from passlib.context import CryptContext


password_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def get_hashed_password(password: str) -> str:
    return password_context.hash(password)


def verify_password(password: str, hashed_pass) -> str:
    return password_context.verify(password, hashed_pass)

Tamam, “hashed_pass[word]” dedigi algoritmaya ozel, parametreleri ve salt’i da iceren bir cikti. Dogrulama icin gerekmesinin sebebi de o. Bi de sabit zamanli karsilastirma yapiyordur kesin.