PDA

View Full Version : سوال: نام و نام خانوادگي در بانك اطلاعاتي



Davood_amega
دوشنبه 27 اردیبهشت 1389, 20:38 عصر
من مي خواستم برنامه اي بنويسم كه دو آبجكت دارد كه يكي نام و يكي نام خانوادگي را نشان مي دهد (قاعدتا بايد دو فيلد در Table ايجاد كنم ). اما مي خواستم نظر شما را در رابطه با تركيب اين دو فيلد بدونم اما بشود نام و نام خانوادگي را به صورت مجزا تشخيص داد.
چون در اكثر برنامه اين دو فيلد با هم تركيب مي شوند و به صورت نام وفاميلي مي آيد اما در بعضي جاها نياز به جداسازي آن هستيم .
راه حل و نظر شما در اين زمينه چيست ؟
درباره زمان و تاريخ نيز دقيقا اين مشكل را دارم .

M.YasPro
دوشنبه 27 اردیبهشت 1389, 20:49 عصر
سلام
ذات فیلد تجزیه ناپذیر بودن هست .
موفق باشید .

robat7
پنج شنبه 30 اردیبهشت 1389, 20:54 عصر
سلام
من در برخي بانك هاي اطلاعاتي ديده ام كه نام و نام خانوادگي را هم بصورت تركيبي در برخي از جدوال نگه مي دارند و بين ايندو از "," يا كاراكتر ديگر استفاده مي كنند كه در صورت نياز مي تواني با تابع split به نام يا نام خانوادگي به تنهايي دسترسي پيدا خواهي كرد.

ezamnejad
پنج شنبه 30 اردیبهشت 1389, 21:17 عصر
سلام
فیلدها را به صورت جداگانه ذخیره کنید برای تاریخ هم از datetime استفاده کنید

محمد سلیم آبادی
جمعه 31 اردیبهشت 1389, 04:11 صبح
من مي خواستم برنامه اي بنويسم كه دو آبجكت دارد كه يكي نام و يكي نام خانوادگي را نشان مي دهد (قاعدتا بايد دو فيلد در Table ايجاد كنم ). اما مي خواستم نظر شما را در رابطه با تركيب اين دو فيلد بدونم اما بشود نام و نام خانوادگي را به صورت مجزا تشخيص داد.
چون در اكثر برنامه اين دو فيلد با هم تركيب مي شوند و به صورت نام وفاميلي مي آيد اما در بعضي جاها نياز به جداسازي آن هستيم .
راه حل و نظر شما در اين زمينه چيست ؟
درباره زمان و تاريخ نيز دقيقا اين مشكل را دارم .


سلام
من در برخي بانك هاي اطلاعاتي ديده ام كه نام و نام خانوادگي را هم بصورت تركيبي در برخي از جدوال نگه مي دارند و بين ايندو از "," يا كاراكتر ديگر استفاده مي كنند كه در صورت نياز مي تواني با تابع split به نام يا نام خانوادگي به تنهايي دسترسي پيدا خواهي كرد.
سلام دوست من،
در این سناریو اصلا نیازی به اینگونه توابع splitting دیده نمی شود. چون تعداد عناصر رشته ثابت و معین و بسیار محدود هست (یعنی 2 عنصر، نام و نام خانوادگی). در این مورد می توانید به راحتی این دو مقدار را از هم تفکیک کنید در ادامه به دو روش اشاره می کنم:



DECLARE @t TABLE (name VARCHAR(500));
INSERT INTO @t(name) SELECT 'Mohammad Salimabadi' UNION ALL
SELECT 'Alireza Shahnahad'

SELECT PARSENAME(REPLACE(name, ' ', '.'), 2) AS [first name],
PARSENAME(REPLACE(name, ' ', '.'), 1) AS [last name]
FROM @t

SELECT LEFT(name, CHARINDEX(' ', name) - 1) AS [first name],
SUBSTRING(name, CHARINDEX(' ', name) + 1, LEN(name)-CHARINDEX(' ', name)) AS [last name]
FROM @t


فقط توجه داشته باشین بدلیل اینکه نام RDBMS ای را ذکر نکردین من SQL Server را بطور پیشفرض در نظر گرفتم.
Query فوق را کافیه اجرا کنید، تا نتیجه ی مورد نظر را مشاهده کنید.

موفق باشید.

Open-Source
جمعه 31 اردیبهشت 1389, 12:49 عصر
سطح اول نرمال سازی یک بانک اینه که فیلد مرکب در بانک وجود نداشته باشه.

FastCode
جمعه 31 اردیبهشت 1389, 13:25 عصر
سطح اول نرمال سازی یک بانک اینه که فیلد مرکب در بانک وجود نداشته باشه.
من مواردی دیدم که سطح دوم رو هم اجرا کردن.
خودم هم یک بار اجرا کردم البته برای فونت نه برای اسم.
کار واقعا" راحتیه.(یعنی اونطور که به نظر میاد سخت نیست.)
و سرعتش هم از split و len و ... هم خیلی خیلی بیشتره.
این کد BLL منه:



static Font defaultFont = new System.Drawing.Font("Envy CodeR", 8, System.Drawing.FontStyle.Regular);
public static U_Font _Get(System.Drawing.Font _Font)
{
if (_Font == null) _Font = defaultFont;
foreach (U_Font font in rows)
{
if (font._C_emSize == _Font.Size)
{
int Style = (int)_Font.Style;
if (font._C_Style == Style)
{
if (font._C_Name == _Font.Name)
{
return font;
}
}
}
}
U_Font f = U_Font.AddU_Font(_Font.Name, (double)_Font.Size, (long)_Font.Style);
f.Update();
return f;
}
//this method is used to delete unused rows.
public static long _FindFirstExactEqual(long ID)
{
U_Font _Font = PKFind(ID, true);
double size = _Font._C_emSize;
long Style = _Font._C_Style;
foreach (U_Font font in rows)
{
if (font._C_emSize == size)
{
if (font._C_Style == Style)
{
if (font._C_Name == _Font._C_Name)
{
return font.ID;
}
}
}
}
return ID;
}
public static System.Drawing.Font _Get(U_Font _Font)
{
return new System.Drawing.Font(_Font.Name, (float)_Font.emSize, (System.Drawing.FontStyle)_Font.Style);
}
public System.Drawing.Font _Font
{
get
{
return new System.Drawing.Font(Name, (float)emSize, (System.Drawing.FontStyle)Style);
}
set
{
Name = value.Name;
emSize = value.Size;
Style = (long)value.Style;
}
}

خیلی به هم ریخته است ولی خوب کار میکنه.:خجالت: